package com.eastmelon.blog.dao.impl;

import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Repository;

import com.eastmelon.basic.model.Pager;
import com.eastmelon.basic.model.SystemContext;
import com.eastmelon.blog.dao.ArticleDao;
import com.eastmelon.blog.entity.Article;
import com.eastmelon.blog.vo.DateCount;

@Repository("articleDao")
public class ArticleDaoImpl extends BaseDaoImpl<Article> implements ArticleDao{
	public ArticleDaoImpl(){
		super.setNs("com.eastmelon.blog.mapper.ArticleMapper");
	}

	@Override
	public String getOldImage(Serializable id) {
		return this.getSqlSession().selectOne(getNs()+".getOldImage", id);
	}

	@Override
	public List<String> findOldImages(Serializable[] ids) {
		 return this.getSqlSession().selectList(getNs()+".findOldImages", ids);
	}

	@Override
	public List<Article> findAll() {
		return this.getSqlSession().selectList(getNs()+".findAll");
	}

	@Override
	public List<DateCount> findDateCount() {
		return this.getSqlSession().selectList(getNs()+".findDateCount");
	}

	@Override
	public Pager<Article> findByCategory(Serializable cid) {
		int pageSize=SystemContext.getPageSize();
		int pageOffset=SystemContext.getPageOffset();
		Pager<Article> pager=new Pager<Article>();
		Map<String,Object> params=new HashMap<String,Object>();
		params.put("pageSize", pageSize);
		params.put("pageOffset", pageOffset);
		List<Article> datas=this.getSqlSession().selectList(getNs()+".findByCategory",cid);
		int total=this.getSqlSession().selectOne(getNs()+".getCategoryTotal",cid);
		pager.setDatas(datas);
		pager.setOffset(pageOffset);
		pager.setSize(pageSize);
		pager.setTotal(total);
		return pager;
	}

	@Override
	public Pager<Article> findByTags(Serializable tid) {
		int pageSize=SystemContext.getPageSize();
		int pageOffset=SystemContext.getPageOffset();
		Pager<Article> pager=new Pager<Article>();
		Map<String,Object> params=new HashMap<String,Object>();
		params.put("pageSize", pageSize);
		params.put("pageOffset", pageOffset);
		List<Article> datas=this.getSqlSession().selectList(getNs()+".findByTags",tid);
		int total=this.getSqlSession().selectOne(getNs()+".getTagsTotal",tid);
		pager.setDatas(datas);
		pager.setOffset(pageOffset);
		pager.setSize(pageSize);
		pager.setTotal(total);
		return pager;
	}
	
	@Override
	public Pager<Article> findByDateCategory(String name) {
		int pageSize=SystemContext.getPageSize();
		int pageOffset=SystemContext.getPageOffset();
		Pager<Article> pager=new Pager<Article>();
		Map<String,Object> params=new HashMap<String,Object>();
		params.put("pageSize", pageSize);
		params.put("pageOffset", pageOffset);
		List<Article> datas=this.getSqlSession().selectList(getNs()+".findByDateCategory",name);
		int total=this.getSqlSession().selectOne(getNs()+".getDateTotal",name);
		pager.setDatas(datas);
		pager.setOffset(pageOffset);
		pager.setSize(pageSize);
		pager.setTotal(total);
		return pager;
	}

	@Override
	public Article getLastItem() {
		return this.getSqlSession().selectOne(getNs()+".getLastItem");
	}

	@Override
	public Article getPreItem(Serializable id) {
		return this.getSqlSession().selectOne(getNs()+".getPreItem",id);
	}

	@Override
	public Article getNextItem(Serializable id) {
		return this.getSqlSession().selectOne(getNs()+".getNextItem",id);
	}
	
}
